package com.asiainfo.iam.controller;

import com.asiainfo.iam.service.DMDatabaseOperateService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RestController;

import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;

/**
 * 用于向DM数据库定表中添加密列和检查指定数据库表中是否存在指定列
 * 用于查询指定数据库和表中的记录总数。
 * 获取指定数据库和表的主键列名称列表
 * 用于对数据库表中的特定字段进行更新操作。
 */
@RestController
public class DMDatabaseOperateController {
    private static final Logger log = LoggerFactory.getLogger(DMDatabaseOperateController.class);

    @Autowired
    private DMDatabaseOperateService dmDatabaseOperateService;


    /**
     * 添加b64SignedData列，用于存储Base64编码的签名数据(clob(50000))
     * 添加b64Cert列，用于存储Base64编码的证书数据(clob(50000))
     * 添加verifyy列，用于存储验证信息（VARCHAR(20)）
     * 添加SignedDataUpdataTime列，用于记录签名数据更新时间(timestamp)
     * 添加verifyyUpDataTime列，用于记录验证信息更新时间(timestamp)
     */

    /**
     * 添加数据列
     * @param databaseName 数据库名称
     * @param tableName 表名称
     * @param columnName 列名称
     * @param columnType 列类型
     * @param connection 数据库连接
     */
    public void addDataColumn(String databaseName, String tableName, String columnName, String columnType, Connection connection) {
        dmDatabaseOperateService.executeAlterTable(databaseName, tableName, columnName, columnType, connection);
    }
    /**
     * 检查指定数据库表中是否存在指定列
     *
     * @param databaseName 数据库名称
     * @param tableName    表名称
     * @param columnName   列名称
     * @param connection   数据库连接
     * @return true表示列存在，false表示列不存在
     * @throws SQLException SQL异常
     */

    public boolean checkDataColumn(String databaseName, String tableName, String columnName, Connection connection)throws SQLException {
        return dmDatabaseOperateService.checkColumnExists(databaseName, tableName, columnName, connection);

    }

    /**
     * 查询指定数据库和表中的记录总数。
     * @param databaseName 数据库名称
     * @param tableName 表名称
     * @param connection 数据库连接
     * @param conditionTemp 动态 WHERE 条件字符串
     * @return 返回符合条件的记录总数
     */
    public long queryTableRowSum(String databaseName, String tableName, Connection connection, String conditionTemp){
        return dmDatabaseOperateService.queryTableRowSum(databaseName, tableName, connection, conditionTemp);
    }

    /**
     * 获取指定数据库和表的主键列名称列表。
     * @param databaseName 数据库名称
     * @param tableName 表名称
     * @param connection 数据库连接
     * @return 返回主键列名称列表
     * @throws SQLException SQL异常
     */

    public List<String> getPrimaryKeyOfDamengTable(String databaseName, String tableName, Connection connection) throws SQLException {
        return dmDatabaseOperateService.getPrimaryKeyOfDamengTable(databaseName, tableName, connection);
    }

    /**
     * 更新表字段(verifyy(验签),b64SignedData,b64Cert)
     * @param databaseName 数据库名称
     * @param tableName 表名称
     * @param connection 数据库连接
     * @param findNameList 查询字段列表
     * @param valueSQL 字段值列表
     * @param message 验证信息
     * @return 返回更新的行数
     */
    public long updateB64SignedDataColumn(String databaseName,
                                  String tableName,
                                  Connection connection,
                                  List<String> findNameList,
                                  List<String> valueSQL,
                                  String message) throws SQLException{
        return dmDatabaseOperateService.updateB64SignedDataColumn(databaseName,
                tableName,
                connection,
                findNameList,
                valueSQL,
                message);
    }
    public long updateB64CertColumn(String databaseName,
                                  String tableName,
                                  Connection connection,
                                  List<String> findNameList,
                                  List<String> valueSQL,
                                  String message) throws SQLException{
        return dmDatabaseOperateService.updateB64CertColumn(databaseName,
                tableName,
                connection,
                findNameList,
                valueSQL,
                message);
    }
    public long updateTableColumnYanQian(String databaseName,
                                    String tableName,
                                    Connection connection,
                                    List<String> findNameList,
                                    List<String> valueSQL,
                                    String message) throws SQLException{
        return dmDatabaseOperateService.updateTableColumnYanQian(databaseName,
                tableName,
                connection,
                findNameList,
                valueSQL,
                message);
    }


}
